package com.example.chain.service.impl;

import com.example.chain.component.IDecision;
import com.example.chain.dto.DecisionResult;
import com.example.chain.service.TestService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 服务层实现
 *
 * @author shixiaodong
 * @date 2022-05-26
 */
@Service
public class TestServiceImpl implements TestService {
    @Resource
    private Map<String, IDecision> map;

    @Override
    public void decision(DecisionResult result) {
        IDecision.Builder builder = new IDecision.Builder();
        // 注意，在spring 托管的情况，不可以重复添加service，会形成递归调用
        // 如果有一个重复执行的链节点，请使用new的方式去创建
        builder.add(map.get("quantity"))
                .add(map.get("time"))
                .add(map.get("forbidden"))
                .build();
        // 执行责任链
        builder.build().makeDecision(result);

    }
}
